import axios from "axios";
import store from "@/store";
import router from "@/router";

// 1. 创建axios和基本配置
const instance = axios.create({
    baseURL: "http://pcapi-xiaotuxian-front-devtest.itheima.net/",
    timeout: 5000,
});

// 2. 请求拦截器，携带token
instance.interceptors.request.use(
    (config) => {
        const { profile } = store.state.user;
        if (profile.token) {
            config.headers.Authorization = `Bearer ${profile.token}`;
        }
        return config;
    },
    (err) => Promise.reject(err)
);

// 3. 响应拦截器，取出内ret中的data，处理401错误
instance.interceptors.response.use(
    (ret) => ret.data,
    (err) => {
        if (err.response && err.response.status === 401) {
            // 清除用户信息
            store.commit("user/setProfile", {});
            // 跳转登录页
            router.push("/login");
        }
        return Promise.reject(err);
    }
);

// 封装一个函数,用于更加便捷的发送api请求
/*
 * url请求地址
 * method请求方式
 * submitDate请求数据
 */
const request = (url, method, submitDate) => {
    return instance({
        url,
        method,
        // 请求数据放在哪里??不一定,得根据情况来判断
        // 当请求方式是get的时候放params里,其他放data里
        // 如何插入一个动态的key?用[],[]里边可以写变量,可以写三元,js表达式

        // method可能有大小写问题,所以先将method加上.toLowerCase()统一改为小写
        [method.toLowerCase() === 'get' ? 'params' : 'data']: submitDate
    })
}

export default request
